package jp.co.hcs.attendancemanagement.data.factory;

import java.sql.SQLException;

import jp.co.hcs.attendancemanagement.data.dao.ApprovalCompanyDAO;
import jp.co.hcs.attendancemanagement.data.dao.ApprovalDAO;
import jp.co.hcs.attendancemanagement.data.dao.ApprovalDepartmentDAO;
import jp.co.hcs.attendancemanagement.data.dao.ApprovalDivisionDAO;
import jp.co.hcs.attendancemanagement.data.dao.ApprovalEmployeeDAO;
import jp.co.hcs.attendancemanagement.data.dao.ApprovalGroupHeaderDAO;
import jp.co.hcs.attendancemanagement.data.dao.AuthenticationDAO;
import jp.co.hcs.attendancemanagement.data.dao.CompanyDAO;
import jp.co.hcs.attendancemanagement.data.dao.DepartmentDAO;
import jp.co.hcs.attendancemanagement.data.dao.DepartmentMasterDAO;
import jp.co.hcs.attendancemanagement.data.dao.DivisionDAO;
import jp.co.hcs.attendancemanagement.data.dao.EffortActualDAO;
import jp.co.hcs.attendancemanagement.data.dao.EmployeeMasterDAO;
import jp.co.hcs.attendancemanagement.data.dao.EmployeeVacationDAO;
import jp.co.hcs.attendancemanagement.data.dao.HolidayDAO;
import jp.co.hcs.attendancemanagement.data.dao.JobDAO;
import jp.co.hcs.attendancemanagement.data.dao.LeaveApproveDAO;
import jp.co.hcs.attendancemanagement.data.dao.PerformanceStampDAO;
import jp.co.hcs.attendancemanagement.data.dao.PositionMasterDAO;
import jp.co.hcs.attendancemanagement.data.dao.ProjectDAO;
import jp.co.hcs.attendancemanagement.data.dao.RestTimeActualDAO;
import jp.co.hcs.attendancemanagement.data.dao.RestTimeDAO;
import jp.co.hcs.attendancemanagement.data.dao.SubstituteHolidayActualDAO;
import jp.co.hcs.attendancemanagement.data.dao.WorkDAO;
import jp.co.hcs.attendancemanagement.data.dao.WorkMessageDAO;
import jp.co.hcs.attendancemanagement.data.dao.WorkingDayApproveDAO;
import jp.co.hcs.attendancemanagement.data.dao.WorkingMonthApproveDAO;
import jp.co.hcs.attendancemanagement.data.dao.WorkingTimeActualDAO;
import jp.co.hcs.attendancemanagement.data.dao.WorkingTimeMasterDAO;
import jp.co.hcs.attendancemanagement.data.dao.WorkingTimeQuotaDAO;

/**
 * A factory for creating Dao objects.
 */
public interface DaoFactory {

  /**
   * Gets the approval company dao.
   * 
   * @return the approval company dao
   */
  public ApprovalCompanyDAO getApprovalCompanyDAO();

  /**
   * Gets the approval dao.
   * 
   * @return the approval dao
   */
  public ApprovalDAO getApprovalDAO();

  /**
   * Gets the approval department dao.
   * 
   * @return the approval department dao
   */
  public ApprovalDepartmentDAO getApprovalDepartmentDAO();

  /**
   * Gets the approval division dao.
   * 
   * @return the approval division dao
   */
  public ApprovalDivisionDAO getApprovalDivisionDAO();

  /**
   * Gets the approval employee dao.
   * 
   * @return the approval employee dao
   */
  public ApprovalEmployeeDAO getApprovalEmployeeDAO();

  /**
   * Gets the approval group header dao.
   * 
   * @return the approval group header dao
   */
  public ApprovalGroupHeaderDAO getApprovalGroupHeaderDAO();

  /**
   * Gets the authentication dao.
   * 
   * @return the authentication dao
   */
  public AuthenticationDAO getAuthenticationDAO();

  /**
   * Gets the company dao.
   * 
   * @return the company dao
   */
  public CompanyDAO getCompanyDAO();

  /**
   * Gets the department dao.
   * 
   * @return the department dao
   */
  public DepartmentDAO getDepartmentDAO();

  /**
   * Gets the department master dao.
   * 
   * @return the department master dao
   */
  public DepartmentMasterDAO getDepartmentMasterDAO();

  /**
   * Gets the division dao.
   * 
   * @return the division dao
   */
  public DivisionDAO getDivisionDAO();

  /**
   * Gets the effort actual dao.
   * 
   * @return the effort actual dao
   */
  public EffortActualDAO getEffortActualDAO();

  /**
   * Gets the employee master dao.
   * 
   * @return the employee master dao
   */
  public EmployeeMasterDAO getEmployeeMasterDAO();

  /**
   * Gets the employee vacation dao.
   * 
   * @return the employee vacation dao
   */
  public EmployeeVacationDAO getEmployeeVacationDAO();

  /**
   * Gets the holiday dao.
   * 
   * @return the holiday dao
   */
  public HolidayDAO getHolidayDAO();

  /**
   * Gets the job division dao.
   * 
   * @return the job division dao
   */
  public JobDAO getJobDivisionDAO();

  /**
   * Gets the leave approve dao.
   * 
   * @return the leave approve dao
   */
  public LeaveApproveDAO getLeaveApproveDAO();

  /**
   * Gets the performance stamp dao.
   * 
   * @return the performance stamp dao
   */
  public PerformanceStampDAO getPerformanceStampDAO();

  /**
   * Gets the position master dao.
   * 
   * @return the position master dao
   */
  public PositionMasterDAO getPositionMasterDAO();

  /**
   * Gets the project dao.
   * 
   * @return the project dao
   */
  public ProjectDAO getProjectDAO();

  /**
   * Gets the rest time actual dao.
   * 
   * @return the rest time actual dao
   */
  public RestTimeActualDAO getRestTimeActualDAO();

  /**
   * Gets the rest time dao.
   * 
   * @return the rest time dao
   */
  public RestTimeDAO getRestTimeDAO();

  /**
   * Gets the substitute holiday actual dao.
   * 
   * @return the substitute holiday actual dao
   */
  public SubstituteHolidayActualDAO getSubstituteHolidayActualDAO();

  /**
   * Gets the work dao.
   * 
   * @return the work dao
   */
  public WorkDAO getWorkDAO();

  /**
   * Gets the working day approve dao.
   * 
   * @return the working day approve dao
   */
  public WorkingDayApproveDAO getWorkingDayApproveDAO();

  /**
   * Gets the working month approve dao.
   * 
   * @return the working month approve dao
   */
  public WorkingMonthApproveDAO getWorkingMonthApproveDAO();

  /**
   * Gets the working time actual dao.
   * 
   * @return the working time actual dao
   */
  public WorkingTimeActualDAO getWorkingTimeActualDAO();

  /**
   * Gets the working time master dao.
   * 
   * @return the working time master dao
   */
  public WorkingTimeMasterDAO getWorkingTimeMasterDAO();

  /**
   * Gets the working time quota dao.
   * 
   * @return the working time quota dao
   */
  public WorkingTimeQuotaDAO getWorkingTimeQuotaDAO();

  /**
   * Gets the work message dao.
   * 
   * @return the work message dao
   */
  public WorkMessageDAO getWorkMessageDAO();
  
  public void startTransaction() throws SQLException;
  public void commitTransaction() throws SQLException;
  public void endTransaction() throws SQLException;
}
